// utils/wechat-sdk.js

class WechatSDK {
  // 检查是否在微信环境中
  static isWechatBrowser() {
    if (typeof window === 'undefined') return false
    const ua = navigator.userAgent.toLowerCase()
    return ua.indexOf('micromessenger') !== -1
  }

  // 动态加载微信 JS-SDK
  static loadWxSDK() {
    return new Promise((resolve, reject) => {
      // 如果已经加载，直接返回
      if (typeof window.wx !== 'undefined' && typeof window.wx.ready === 'function') {
        console.log('微信 JS-SDK 已加载')
        resolve()
        return
      }

      // 检查是否正在加载中
      if (window._wxLoading) {
        const checkInterval = setInterval(() => {
          if (typeof window.wx !== 'undefined' && typeof window.wx.ready === 'function') {
            clearInterval(checkInterval)
            resolve()
          }
        }, 100)
        return
      }

      window._wxLoading = true
      
      const script = document.createElement('script')
      script.src = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js'
      
      script.onload = () => {
        console.log('微信 JS-SDK 脚本加载完成')
        window._wxLoading = false
        
        // 等待 wx 对象初始化
        const checkWx = setInterval(() => {
          if (typeof window.wx !== 'undefined') {
            clearInterval(checkWx)
            console.log('wx 对象已就绪:', typeof window.wx.ready)
            resolve()
          }
        }, 50)
        
        // 5秒超时
        setTimeout(() => {
          clearInterval(checkWx)
          if (typeof window.wx === 'undefined') {
            reject(new Error('微信 JS-SDK 加载超时'))
          }
        }, 5000)
      }
      
      script.onerror = (error) => {
        window._wxLoading = false
        console.error('微信 JS-SDK 加载失败:', error)
        reject(new Error('微信 JS-SDK 加载失败'))
      }
      
      document.head.appendChild(script)
    })
  }

  // 初始化微信 SDK
  static async init() {
    console.log('=== 开始初始化微信 SDK ===')
    
    // 检查环境
    if (!this.isWechatBrowser()) {
      console.warn('非微信浏览器环境，跳过微信 SDK 初始化')
      return
    }

    try {
      // 1. 加载微信 JS-SDK
      console.log('1. 加载微信 JS-SDK...')
      await this.loadWxSDK()
      
      // 2. 验证 wx 对象和方法
      console.log('2. 验证 wx 对象...')
      if (typeof window.wx === 'undefined') {
        throw new Error('wx 对象未定义')
      }
      
      if (typeof window.wx.ready !== 'function') {
        throw new Error('wx.ready 方法不存在')
      }
      
      if (typeof window.wx.config !== 'function') {
        throw new Error('wx.config 方法不存在')
      }
      
      console.log('wx 对象验证通过:', {
        ready: typeof window.wx.ready,
        config: typeof window.wx.config
      })

      // 3. 获取后端配置
      console.log('3. 获取微信配置...')
      const config = await this.getWxConfig()
      console.log('获取到微信配置:', config)

      // 4. 配置微信 SDK
      console.log('4. 执行 wx.config...')
      return new Promise((resolve, reject) => {
        window.wx.config({
          debug: process.env.NODE_ENV === 'development', // 开发环境开启调试
          appId: config.appId,
          timestamp: config.timestamp,
          nonceStr: config.nonceStr,
          signature: config.signature,
          jsApiList: [
            'onMenuShareTimeline',
            'onMenuShareAppMessage',
            'addCard',
            'openCard',
            'chooseCard'
          ]
        })

        window.wx.ready(() => {
          //console.log('✅ 微信 SDK 初始化成功')
          resolve()
        })

        window.wx.error((err) => {
          console.error('❌ 微信 SDK 配置失败:', err)
          reject(new Error(`微信 SDK 配置失败: ${JSON.stringify(err)}`))
        })
      })

    } catch (error) {
      console.error('❌ 微信 SDK 初始化失败:', error)
      throw error
    }
  }

  // 获取微信配置
  static async getWxConfig() {
    try {
      const currentUrl = window.location.href.split('#')[0]
      //console.log('请求微信配置，当前URL:', currentUrl)
      
      const response = await uni.request({
      //  url: '/api/wechat/js-config',
	   url: "https://ddjy.chepaiyunhui.com/web/wechat/config",
        method: 'POST',
        data: { 
          url: currentUrl,
          timestamp: Date.now()
        },
        header: {
          'Content-Type': 'application/json'
        }
      })
      
      //console.log('微信配置接口响应:', response.data.data)
     
      
      if (response.statusCode === 200 ) {
        return response.data.data
      } else {
        throw new Error(response.data.data?.message || '获取微信配置失败')
      }
    } catch (error) {
      console.error('请求微信配置接口失败:', error)
      throw error
    }
  }

  // 安全的方法调用包装
  static safeCall(methodName, ...args) {
    if (typeof window.wx === 'undefined') {
      console.warn(`wx 对象未定义，无法调用 ${methodName}`)
      return false
    }
    
    if (typeof window.wx[methodName] !== 'function') {
      console.warn(`wx.${methodName} 不是函数`)
      return false
    }
    
    try {
      window.wx[methodName](...args)
      return true
    } catch (error) {
      console.error(`调用 wx.${methodName} 失败:`, error)
      return false
    }
  }

  // 安全的 ready 方法
  static ready(callback) {
    return this.safeCall('ready', callback)
  }

  // 设置分享配置
  static setShareConfig(shareData) {
    if (!this.isWechatBrowser()) return
    
    this.ready(() => {
      // 分享到朋友圈
      this.safeCall('onMenuShareTimeline', {
        title: shareData.title,
        link: shareData.link,
        imgUrl: shareData.imgUrl,
        success: () => {
          console.log('分享到朋友圈成功')
        },
        cancel: () => {
          console.log('取消分享到朋友圈')
        }
      })

      // 分享给朋友
      this.safeCall('onMenuShareAppMessage', {
        title: shareData.title,
        desc: shareData.desc,
        link: shareData.link,
        imgUrl: shareData.imgUrl,
        success: () => {
          console.log('分享给朋友成功')
        },
        cancel: () => {
          console.log('取消分享给朋友')
        }
      })
    })
  }

  // 检查微信 SDK 状态
  static checkStatus() {
    return {
      isWechat: this.isWechatBrowser(),
      isWxLoaded: typeof window.wx !== 'undefined',
      hasReady: typeof window.wx?.ready === 'function',
      hasConfig: typeof window.wx?.config === 'function',
      userAgent: navigator.userAgent
    }
  }
}

export default WechatSDK